package com.itany.corejava.day09;

import com.itany.corejava.day06.Person;

import java.util.Comparator;

public class TestLambda {

    public static void main(String[] args) {
        f("abc", new Template(){

            @Override
            public void callback() {
                System.out.println("callback代码");
            }
        });

        f("aaa",()->{
            System.out.println("lambda代码");
        });


        //无参，无返回值
        Template template=()->{
            System.out.println("lambda代码");
        };

        //一个参数，无返回值
        // Template2 template2=(String s)->{
        //     System.out.println(s);
        // };
        //类型推断 参数类型可以省略
        // Template2 template2=(s)->{
        //     System.out.println(s);
        // };
        //一个参数 参数小括号可以省略
        Template2 template2=s->{
            System.out.println(s);
        };
        template2.callback("abc");

        //多个参数 有返回值
        // Template3 template3=(a,b)->{
        //     System.out.println("a = " + a);
        //     System.out.println("b = " + b);
        //     return a+b;
        // };
        // System.out.println(template3.callback(3, 4));

        //Lambda体只有一条语句 return和大括号都可以省略
        Template3 template3=(a,b)->a+b;
        System.out.println(template3.callback(6, 7));
    }


    public static void f(String str,Template template){
        System.out.println("111111111");
        System.out.println(str);
        System.out.println("222222222");
        template.callback();
        System.out.println("333333333");
    }



}

@FunctionalInterface
interface Template{
    public void callback();
}
@FunctionalInterface
interface Template2{
    public void callback(String s);
}
@FunctionalInterface
interface Template3{
    public int callback(int a,int b);
}

